iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
SideProject30

從零開始的外匯自動程式交易系列 第 25

DAY25 指標介紹(上)

  • 分享至 

  • xImage
  •  

講了快10天的程式語言,不知道大家對Mql5的應用有沒有更熟悉了一點呢,今天是連假的最後一天,就來講點輕鬆的吧。

什麼是指標?

指標(Indicator)通常指的是技術指標,是一種用於分析金融市場價格和交易活動的工具。這些指標是數學公式或算法的應用,通常基於過去的市場數據,以提供交易者有關市場趨勢、波動性、超買/超賣情況等方面的信息。

1.移動平均線(Moving Averages)

通過計算一段時間內的價格平均值,平滑價格數據以識別趨勢。在MQL5中,使用iMA函數可以計算各種類型的移動平均線,如簡單移動平均線(SMA)或指數移動平均線(EMA)。它們用於識別市場趨勢,當價格位於平均線上方時,可能表示上升趨勢,下方表示下降趨勢,有助於交易者制定入場和出場策略。

  • 計算簡單移動平均線(SMA)的範例:
double maArray[];
int maPeriod = 50; // 50期間的SMA

ArraySetAsSeries(maArray, true); // 將數組設置為倒序
ArrayResize(maArray, Bars); // 設置數組大小為歷史數據的Bars

for(int i = 0; i < Bars; i++)
{
    maArray[i] = iMA(Symbol(), 0, maPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
}

2.相對強度指數(Relative Strength Index)

用於評估金融市場的超買和超賣情況。RSI的值在0到100之間,通常70以上表示市場可能超買,可能發生價格下跌;30以下表示市場可能超賣,可能發生價格上漲。RSI可用於識別價格反轉點,提供交易者有關市場強度和趨勢的信息。

  • 範例:
double rsiArray[];
int rsiPeriod = 14; // RSI計算的期間

ArraySetAsSeries(rsiArray, true); // 將數組設置為倒序
ArrayResize(rsiArray, Bars); // 設置數組大小為歷史數據的Bars

for(int i = 0; i < Bars; i++)
{
    rsiArray[i] = iRSI(Symbol(), 0, rsiPeriod, PRICE_CLOSE, i);
}

3.布林帶(Bollinger Bands)

由上、中和下三條帶狀線構成,基於價格波動性而變動。中間帶是簡單移動平均線,上下兩帶則是基於價格的標準差計算的。布林帶用於測量價格波動,並識別市場的支撐和阻力水平,有助於預測價格走勢。

  • 範例:
double upperBand[];
double middleBand[];
double lowerBand[];
int period = 20; // 期間
double deviation = 2.0; // 標準差倍數

ArraySetAsSeries(upperBand, true);
ArraySetAsSeries(middleBand, true);
ArraySetAsSeries(lowerBand, true);

ArrayResize(upperBand, Bars);
ArrayResize(middleBand, Bars);
ArrayResize(lowerBand, Bars);

for(int i = 0; i < Bars; i++)
{
    middleBand[i] = iMA(Symbol(), 0, period, 0, MODE_SMA, PRICE_CLOSE, i);
    double stdDev = iStdDev(Symbol(), 0, period, 0, MODE_SMA, PRICE_CLOSE, i);
    upperBand[i] = middleBand[i] + deviation * stdDev;
    lowerBand[i] = middleBand[i] - deviation * stdDev;
}

4.MACD(Moving Average Convergence Divergence)

用於識別市場的趨勢變化和交叉點。它由兩條移動平均線組成,快速(短期)和慢速(長期),以及一條稱為信號線的平均值。MACD的交叉和變化可用於生成交易信號,幫助交易者預測價格走勢的變化。

  • 範例:
double macdLine[];
double signalLine[];
double histogram[];

int fastEMA = 12; // 快速EMA的期間
int slowEMA = 26; // 慢速EMA的期間
int signalSMA = 9; // 信號線的期間

ArraySetAsSeries(macdLine, true);
ArraySetAsSeries(signalLine, true);
ArraySetAsSeries(histogram, true);

ArrayResize(macdLine, Bars);
ArrayResize(signalLine, Bars);
ArrayResize(histogram, Bars);

for(int i = 0; i < Bars; i++)
{
    macdLine[i] = iMACD(Symbol(), 0, fastEMA, slowEMA, signalSMA, PRICE_CLOSE, i, i);
    signalLine[i] = iSignal(Symbol(), 0, fastEMA, slowEMA, signalSMA, PRICE_CLOSE, i, i);
    histogram[i] = macdLine[i] - signalLine[i];
}

5.隨機指標(Stochastic Oscillator)

用於分析市場的超買和超賣情況,以預測價格反轉。它的值介於0到100之間,通常80以上表示超買,20以下表示超賣。隨機指標基於過去一段時間內的價格範圍,用於識別市場的變化和可能的轉折點。

  • 範例:
double K[];
double D[];
int period = 14; // 隨機指標的期間

ArraySetAsSeries(K, true);
ArraySetAsSeries(D, true);

ArrayResize(K, Bars);
ArrayResize(D, Bars);

for(int i = 0; i < Bars; i++)
{
    K[i] = iStochastic(Symbol(), 0, period, 3, 3, MODE_SMA, 0, MODE_SMA, i);
    D[i] = iMAOnArray(K, 0, 3, MODE_SMA, i);
}

上一篇
DAY24 追蹤止損
下一篇
DAY26 指標介紹(下)
系列文
從零開始的外匯自動程式交易30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言